21999
5937
Zárva. Ehhez a kérdéshez részletekre vagy egyértelműségre van szükség. Jelenleg nem fogadja el a válaszokat.
Szeretne javítani ezen a kérdésen? Adjon meg részleteket és tisztázza a problémát a bejegyzés szerkesztésével.
1 éve zárva.
Javítsa ezt a kérdést
Néhány kódkihívást végzek, és szeretném megszerezni a tömbömből az első 3 értéket azzal, hogy megadom a kezdő indexet, és csak az első (3 vagy bármilyen hosszúságú lehet) értéket kapom a kezdő indexből.
Kipróbáltam ezt a kódot, és működik, de a kódstruktúra túl hosszú, így hogyan lehet ezt rövidebbé tenni, hogy könnyen érthető legyen.
int n = 10;
kettős aláírás = új kettős [] {1, 1, 1};
kettős [] ret = új kettős [n];
kettős összeg = 0;
ret [0] = aláírás [0];
ret [1] = aláírás [1];
ret [2] = aláírás [2];
int x, i;
for (i = 0; i 
                                
A LINQ használatával ilyet próbálhat ki:
var értékek = tömb. Átugrani (index)
.Vegyük (n)
.ToArray ();
Ahol az index az első elem mutatója, és n a kiválasztani kívánt elemek száma.
Például. https://dotnetfiddle.net/Pk1rwY
Mellékesen. A LINQ használata nem jelenti azt, hogy a kód gyorsabb lenne. Kompaktabb / olvashatóbb lenne stb. Annak érdekében, hogy felmérje, mennyire teljesítő a kódja, olyasmit kell használnia, mint a BenchmarkDotNet.
|
Nincs Linq megoldás:
privát statikus T [] Kivonat  (T [] forrás, int fromIndex, int hossz) {
if (null == forrás)
dobja az új ArgumentNullException (név (forrás));
else if (fromIndex <0)
dobja az új ArgumentOutOfRangeException (nameof (fromIndex) nevet,
"From Indexnek nem negatívnak kell lennie");
else if (hossz <0)
dobja új ArgumentOutOfRangeException (nameof (hossz),
"A hossznak nem negatívnak kell lennie");
if (fromIndex> = forrás.Hossz || hossz == 0)
return new T [0];
T [] eredmény = új T [Math.Min (hossz, forrás.Length - fromIndex)];
Array.Copy (forrás, fromIndex, eredmény, 0, result.Length);
visszatérési eredmény;
}
Azután
kettős [] aláírás = új kettős [] {0, 1, 2, 3, 4, 5};
kettős [] ret = Kivonat (aláírás, 3, 2);
Console.Write (string.Join (",", ret));
Eredmény:
3, 4
|
Kérdéséből ki kell használnia az .Take és .Skip operátorok előnyeit.
var result = tömb.Skip (kezdőIndex) .Take (numberOfElements);
Így a kódod alapján úgy tűnik, hogy egy kicsit mást szeretnél csinálni, nevezetesen az összegző elemeket. A .Sum operátor itt segíthet.
|
Nem a keresett válasz? Böngésszen a c # arrays linq címkével ellátott többi kérdésben, vagy tegye fel a saját kérdését.